package geektime.spring.springbucks.service;

import geektime.spring.springbucks.model.Coffee;
import geektime.spring.springbucks.model.CoffeeOrder;
import geektime.spring.springbucks.model.OrderState;
import geektime.spring.springbucks.repository.CoffeeOrderRepository;
import java.util.ArrayList;
import java.util.Arrays;
import javax.transaction.Transactional;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Slf4j
@Service
@Transactional
public class CoffeeOrderService {

  @Autowired
  private CoffeeOrderRepository coffeeOrderRepository;

  public CoffeeOrder createOrder(String customer, Coffee... coffees) {
    CoffeeOrder order = CoffeeOrder.builder().customer(customer)
        .items(new ArrayList<>(Arrays.asList(coffees)))
        .state(OrderState.INIT)
        .build();

    CoffeeOrder saved = coffeeOrderRepository.save(order);
    log.info("New Order:{}", saved);
    return saved;

  }

  public boolean updateState(CoffeeOrder order,OrderState state){
    if(state.compareTo(order.getState())<=0){
      log.warn("Wrong State order:{},{}",state,order.getState());
      return  false;
    }

    order.setState(state);
    coffeeOrderRepository.save(order);
    log.info("Update Order:{}",order);
    return true;
  }
}
